/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlet;

import ejb.sessionBeans.AvisoFacadeRemote;
import ejb.sessionBeans.ContactoFacadeRemote;
import ejb.sessionBeans.UsuarioFacadeRemote;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.Aviso;
import modelo.Contacto;
import modelo.Usuario;
import myBeans.UsuarioBeans;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 *
 * @author inftel
 */
@WebServlet(name = "RegistrarUsuario", urlPatterns = {"/RegistrarUsuario"})
public class RegistrarUsuario extends HttpServlet {
    @EJB
    private AvisoFacadeRemote avisoFacade;    
    @EJB
    private ContactoFacadeRemote contactoFacade;
    @EJB
    private UsuarioFacadeRemote usuarioFacade;
    String directorioArchivos;		// Donde guardaré archivos

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        UsuarioBeans user_bn = new UsuarioBeans();       
        
        Usuario user = registro_usuario(request, response);
        

        if (user != null) {    
            
            if(usuarioFacade.findByPhone(user.getTelefono())==null)
            {
                usuarioFacade.create(user);
                user = usuarioFacade.findByPhone(user.getTelefono());
                user_bn.setUser(user);
            }
            else
            {
                user = usuarioFacade.findByPhone(user.getTelefono());
                user_bn.setUser(user);
            }
            
            

            try {
                List<Contacto> list_contac = contactoFacade.findByUsuario(user.getIdUsuario());
                user_bn.setContactos(list_contac);
                
                List<Aviso> list_aviso = avisoFacade.findByUsuario(user.getIdUsuario());
                user_bn.setAvisos(list_aviso);
                
            } catch (Exception e) {
            }
            
           

            request.setAttribute("info_usuario", user_bn);

            RequestDispatcher rd;
            rd = getServletContext().getRequestDispatcher("/InfoUsuario.jsp");
            rd.forward(request, response);
        }

    }

    private Usuario registro_usuario(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        Usuario user = new Usuario();

        try {

            //// Si la request es del tipo multipart ...
            if (ServletFileUpload.isMultipartContent(request)) {

                //// fileItemsList contendrá una lista de items de archivo que  son instancias de FileItem
                //// Un item de archivo puede contener un archivo para upload o un campo del formulario
                //// con la estructura simple nombre-valor (ejemplo: <input name="text_field" type="text" />)
                ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
                List fileItemsList = servletFileUpload.parseRequest(request);


                //// Itero para obtener todos los FileItem
                Iterator it = fileItemsList.iterator();
                while (it.hasNext()) {
                    FileItem fileItem = (FileItem) it.next();

                    //// El FileItem es un campo simple, del tipo nombre-valor
                    if (fileItem.isFormField()) {
                        String param = fileItem.getFieldName();
                        String valor = fileItem.getString();


                        if (param.equalsIgnoreCase("nombre")) {
                            user.setNombre(valor);
                        }
                        if (param.equalsIgnoreCase("apellidos")) {
                            user.setApellidos(valor);
                        }
                        if (param.equalsIgnoreCase("direccion")) {
                            user.setDireccion(valor);
                        }
                        if (param.equalsIgnoreCase("telefono")) {
                            user.setTelefono(valor);
                        }



                    } //// El FileItem contiene un archivo para upload
                    else {
                        //Guardo en el usuario
                        user.setFoto(fileItem.get());

                    }	//// FIN: es un archivo para upload
                }	//// FIN: iteración de FileItems
            }	//// FIN: la request es del tipo multipart
        } catch (Exception e) {
            //e.printStackTrace(out);
            e.printStackTrace();
            user = null;
        }

        return user;
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
